home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
001-025
/
scopedisk24
/
qrt14src
/
qrtpost.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-18
|
3KB
|
127 lines
/*********************************************************
QrtPost is a post processor for QRT on the Commodode
Amiga. It reads in the QRT file, and spits it out
as a 4096 color bitmap which can be converted to
IFF/HAM by another program.
*********************************************************/
#include <stdio.h>
#define MAXXRES 640 /* max x resolution */
#define SHIFT 3 /* convert 0..127 to 0..15 */
main(argc,argv)
int argc;
char *argv[];
{
int xres, yres, line;
register int x, value;
unsigned short r[MAXXRES], g[MAXXRES], b[MAXXRES];
FILE *in, *out;
unsigned char fgetc();
if (argc != 3) {
printf("Usage: %s InFile OutFile\n",argv[0]);
exit(1);
}
/** open files **/
if ((in = fopen(argv[1],"r"))==NULL) {
printf("Couldn't open file %s\n",argv[1]);
exit(1);
}
if ((out = fopen(argv[2],"w"))==NULL) {
printf("Couldn't open file %s\n",argv[2]);
exit(1);
}
/** load x and y resolution **/
xres = yres = 0;
xres = ((unsigned int)fgetc(in));
xres += ((unsigned int)(fgetc(in) << 8));
yres = ((unsigned int)fgetc(in));
yres += ((unsigned int)(fgetc(in) << 8));
/** print info **/
printf("\nInput file = %s\n", argv[1]);
printf("Output file = %s\n\n", argv[2]);
printf("X resolution = %d\n", xres);
printf("Y resolution = %d\n\n", yres);
while (!feof(in)) {
line = ((int)fgetc(in)); /* read scan line number */
line |= ((int)(fgetc(in) << 8));
if (line >= yres) {
printf("Faulty data file.\n");
exit(1);
}
for (x=0; x<xres; x++) /* read color data */
r[x] = ((short)fgetc(in)) & 0xff;
for (x=0; x<xres; x++)
g[x] = ((short)fgetc(in)) & 0xff;
for (x=0; x<xres; x++)
b[x] = ((short)fgetc(in)) & 0xff;
fputc((unsigned char)(line>>8),out); /* write line number */
fputc((unsigned char)(line&0xff),out);
for (x=0; x<(xres/4); x++) { /* write color data */
value = (r[4*x+3] >> SHIFT);
value = value << 4;
value += (r[4*x+2] >> SHIFT);
fputc((unsigned char)(value),out);
value = (r[4*x+1] >> SHIFT);
value = value << 4;
value += (r[4*x+0] >> SHIFT);
fputc((unsigned char)(value),out);
}
for (x=0; x<(xres/4); x++) { /* write color data */
value = (g[4*x+3] >> SHIFT);
value = value << 4;
value += (g[4*x+2] >> SHIFT);
fputc((unsigned char)(value),out);
value = (g[4*x+1] >> SHIFT);
value = value << 4;
value += (g[4*x+0] >> SHIFT);
fputc((unsigned char)(value),out);
}
for (x=0; x<(xres/4); x++) { /* write color data */
value = (b[4*x+3] >> SHIFT);
value = value << 4;
value += (b[4*x+2] >> SHIFT);
fputc((unsigned char)(value),out);
value = (b[4*x+1] >> SHIFT);
value = value << 4;
value += (b[4*x+0] >> SHIFT);
fputc((unsigned char)(value),out);
}
}
fclose(in); /* close files */
fclose(out);
}